Historically, a single computing device ran a single operating system. Each computer user, for instance, was assigned his or her own client computing device, and that computing device ran an operating system in which the user could run application programs as desired. Similarly, a server computing device ran a single operating system that ran application programs.
However, this type of computer architecture has disadvantages. First, it is costly, because each computing device needs a complete assortment of processors, memory, and input/output (I/O) devices to properly function whether it is being utilized or not. Second, the use of this type of architecture can be inefficient. At any given time, a given computing device may not be performing work, and rather is sitting idle, waiting for a task to be performed during times when workloads increase.
Therefore, a technology has been developed in which more than one operating system is capable of running on a single computing device, sharing at least the memory and the processors of the computing device. Such technology is referred to as virtualization. With virtualization, a given computing device has a number of virtual machines (VM's), or VM environments, where a guest operating system is run in each VM or VM environment. Therefore, guest operating systems for multiple computer users can be run simultaneously on a single computing device, such as a single server computing device. When workload demands are high, more VM's can be instantiated and run. When workloads are low, VM's can be suspended.
The guest operating system of a VM typically supports a single, remotely connected user, and on which are run one or more application programs as desired. The guest operating system hosted by a VM, and the application programs running or capable of running thereon, constitute what is referred to as a “session” that is allocatable to an individual user. A user remotely connects to a VM—that is, the user is allocated a session—via a thin-client computing device, which has a minimum of hardware, since most processing is performed by the server computing device running the VM. The end result is, therefore, a virtualized hosted-client approach, as opposed to a physical hosted-client approach, in which each guest operating system runs on its own separate physical computing device, or “machine,” instead of on a VM.
The virtualized hosted-client approach is advantageous over a physical hosted-client approach, because less hardware resources are typically needed to support the same number of end users. However, the virtual hosted-client approach introduces a number of complexities that have to be satisfied in order to perform up to expectations. These complexities result from the fact that a given session can be suspended, restarted, and moved to other VM's on the same (or different) computing devices, instead of merely having for each user a single physical computing device, or “machine,” that has to be administered.
In particular, the states of all the sessions running on the VM's have to be carefully tracked. For example, a suspended session may have to be assigned to a VM and restarted before it can be allocated to a user. If sessions, and user connections to the sessions, are not maintained properly, then in great likelihood the virtual hosted-client approach will periodically, if not more frequently, fail. That is, the states of the sessions have to be accurately tracked, taking into account their various characteristics, for sessions to be allocated and maintained properly. For this and other reasons, therefore, there is a need for the present invention.